home *** CD-ROM | disk | FTP | other *** search
/ Info-Mac 4 / Info_Mac IV CD-ROM (Pacific HiTech Inc.)(August 1994).iso / Development / General / Open Prolog / Documents / Open Prolog Info < prev    next >
Text File  |  1994-03-22  |  25KB  |  555 lines

  1. ◊ Welcome to 'Open Prolog'.
  2.  
  3. The version of Open Prolog to which this document refers is given in the Get Info… information for this document.
  4.  
  5. Open Prolog is an implementation of Edinburgh-syntax Prolog.
  6. The Edinburgh syntax is the de-facto standard Prolog syntax, and is the basis for the forthcoming ISO Prolog.
  7.  
  8. If you are an absolute beginner in Open Prolog, it's probably better for you to go through the tutorial session in 'Getting Started' in the 'Beginners - look in here' folder. Then, by all means, read this document carefully, especially the section on workarounds at the end.
  9.  
  10. This software is continually under development, so it has bugs.
  11. Save your work often.
  12.  
  13. Changes from previous versions are listed in the file 'Revision History'.
  14.  
  15.  
  16. ◊ Introduction
  17.  
  18. Open Prolog is an implementation of Edinburgh-syntax Prolog.
  19.  
  20. For information on Prolog itself, refer to one of the standard textbooks,
  21. for instance 'Programming in Prolog' by Clocksin & Mellish,
  22. 'Introduction to Logic Programming' by Christopher Hogger, or the
  23. excellent 'Artificial Intelligence through Prolog' by Neil C. Rowe.
  24.  
  25. Open Prolog supports most of the features of DEC Prolog or C-Prolog,
  26. including Definite Clause Grammars.
  27. The 'logical' assert and retract semantics of Lindholm & O'Keefe are
  28. implemented.
  29. Open Prolog supports disjunctive calls, negation, if-then and if-then-else according (we believe) to the draft ISO Prolog standards. In particular, the handling of cuts complies with that specified in the Draft.
  30. It also supports program-originated catch-and-throw exception handling conforming to the ISO Draft. 
  31.  
  32. Real-number arithmetic and internal database predicates are not supported.
  33.  
  34. Last Call Optimisation (often called Tail Recursion Optimisation) is done,
  35. and indexing on the first argument of clause heads is performed,
  36. mainly to detect determinacy so as to improve memory utilisation.
  37.  
  38. Open Prolog is called 'Open' because 'external' predicates can be dropped into
  39. it via a Hypercard-like External Predicate Interface.
  40.  
  41. Open Prolog is not copy protected. 
  42.  
  43.  
  44. ◊ System & Memory Requirements
  45.  
  46. Open Prolog runs in machines having System 6 or later system software.
  47. It is System 7 compatible, and supports 'required' AppleEvents.
  48. Open Prolog is 32-bit clean.
  49.  
  50. Open Prolog will run in a memory allocation of
  51. 700K bytes or a bit less. 1024K bytes is recommended.
  52.  
  53. Most of the programs you might use or write while you are learning Prolog won't require more than 1024K (1M). If they run out of memory, it's usually due to a programming error. Some large programs do, however, require lots of memory.
  54. Open Prolog has run well in a 16 MB partition (on a Quadra with 20MB RAM, running in 32-bit mode). For your information, it also runs, slowly, in a 48MB partition in the same machine with 80MB virtual memory.
  55.  
  56. At the other end of the memory scale, Open Prolog will run comfortably under System 6 on a 1MB machine with Multifinder off. If you can't start up in a 1MB machine with Multifinder off, check that you haven't got too big a cache set (64K should be adequate), and/or too many Startup (INIT) Documents, Extensions or Control Panels.
  57.  
  58. All memory management and garbage collection is automatic.
  59. No divination of stack size or other nonsense is necessary (or possible) - it's done automatically.
  60. The name table is not garbage-collected, so it's possible to overflow it.
  61.  
  62. Open Prolog is capable of running in the Multifinder/System 7 background
  63. on long computations.
  64.  
  65. For your information, the development environment is a Mac IIx with 8MB Ram.
  66. Testing is also done on a Mac Plus with 4MB Ram, a Quadra 700 with 20MB Ram, and a PowerBook 140 with 8MB Ram. Systems are 6.0.8 & 7.1.
  67.  
  68.  
  69. ◊ Speed
  70.  
  71. Open Prolog runs the naive reverse benchmark at about 1900 Lips
  72. on a Macintosh Plus. On a Quadra 950, it runs at just under 50 KLips.
  73. It has not been 'tweaked' to perform particularly well on benchmarks.
  74.  
  75. ◊ About Open Prolog…
  76.  
  77. The 'About Open Prolog…' box contains a stacks indicator which
  78. shows memory space broken into
  79. Name (atom & functor), Code, Global, Local & Trail spaces.
  80.  
  81. It's possible to watch the stacks grow and contract as the program runs,
  82. but keeping the stacks indicator up-to-date slows execution quite a bit!
  83. To avoid the speed penalty, it's possible to open and close the box while
  84. the interpreter is running.
  85. Alternatively, hiding the stacks indicator fully is just as effective.
  86.  
  87. On the 'About Open Prolog…' box, you can see how much RAM has been
  88. allocated to Open Prolog. This will be up to a maximum of what was asked
  89. for, but may be much less if there isn't enough memory in the machine.
  90.  
  91.  
  92. ◊ Installing Open Prolog
  93.  
  94. Open Prolog can be run from floppy, hard disk, or file server.
  95. It may be in a locked or read-only volume. It requires no special installation. 
  96.  
  97. (Previous versions needed the file Syserrs.Err in the System Folder to provide
  98. error information, but this requirement has been removed. Remove Syserrs.Err
  99. if you no longer need it for other applications.)
  100.  
  101. When Open Prolog starts up, it looks for a folder called Open Prolog Additions. This folder has to be in the Extensions folder of your System Folder (or just in the System Folder if you're using System 6). If the folder doesn't exist, then Open Prolog will create it. You can place extra stuff for Open Prolog to use in the Open Prolog Additions folder. For example, in this release, there is a folder called 'for the Open Prolog Additions ƒ' which contains two extra predicates. If you want to use them, drag them into the Open Prolog Additions folder and restart Open Prolog. One predicate is called environment/1, giving information about the Prolog environment, and the other is called debugStartAction/0, called just when a trace begins.
  102.  
  103. ◊ Using Open Prolog
  104.  
  105. Open Prolog is a text-oriented Prolog. If you have used DEC Prolog or
  106. C-Prolog, then the style of use of Open Prolog is quite similar.
  107.  
  108. To try to take advantage of Macintosh's great user interface, Open Prolog's user interface is window-oriented rather than line-oriented. To accomplish this effectively, there are a few differences between Open Prolog's interface and, say, C-Prolog's. In particular, the (line oriented) prompts of C-Prolog are moved to the status bar, and you make use of the ENTER key to enter commands and information.
  109.  
  110. If you haven't done so already, you should go through the beginners tutorial in 'Getting Started'. 
  111.  
  112. ◊ Startup
  113.  
  114. In the standard Macintosh way, you can start Open Prolog
  115. either by opening some of its documents or by opening the application itself.
  116.  
  117. ° Home Folder
  118. A 'Home Folder' is chosen automatically as follows:
  119. If you start Open Prolog by opening some of its documents, then the
  120. folder the documents are in becomes the Home Folder.
  121. If you start Open Prolog by opening it directly, then the folder it's in
  122. becomes the Home Folder.
  123. See the section on File Naming for the significance of the
  124. Home Folder.
  125.  
  126. ° Startup Folder
  127. The Startup Folder is the folder Open Prolog is in when it is launched.
  128.  
  129. ° Additions Folder
  130. The Additions Folder is the folder called 'Open Prolog Additions' that is in the Extensions folder of your System Folder (or in the System Folder if you're using System 6).
  131.  
  132. ° Startup Actions
  133. Before opening any files that you may have selected on the desktop,
  134. Open Prolog will open a Worksheet in the home folder, always called
  135. 'Open Prolog Worksheet'.
  136.  
  137. Open Prolog does a few other things at startup:
  138. It looks in the startup folder, and, if necessary, the additions folder, for a file called 'Open Prolog Options', and if it exists, it is consulted.
  139.  
  140. It looks in the home folder for a file called 'Open Prolog Startup' and if
  141. it exists, it is consulted.
  142.  
  143. These files can be used to do routine things at startup, if desired.
  144. Open Prolog Options should contain generally useful stuff, whereas
  145. Open Prolog Startup, being specific to a folder, can contain more specialised
  146. startup stuff.
  147.  
  148. For example, in this distribution of Open Prolog, a clause in
  149. the Open Prolog Startup file displays an alert message in a box notifying you about the 'Getting Started' document.
  150. So, if this folder happens to be the Home Folder, then the Open Prolog Startup
  151. file will be consulted, and you'll get the alert message.
  152.  
  153. Once the startup phase is finished, you are free to edit these files in the
  154. normal way - there's nothing special about them.
  155.  
  156. Note that while Open Prolog Options is being consulted during startup, the default folder for files is the startup or additions folder rather than the home folder.
  157. This facilitates automatic startup with multiple file consultation. 
  158.  
  159.  
  160. ◊ Working with Open Prolog
  161.  
  162. It helps to visualise the system as having two distinct parts -
  163. the text editor and the Prolog interpreter.
  164.  
  165. ◊ The Text Editor part of Open Prolog
  166.  
  167. Your interaction with Open Prolog is via the text editor. With it, you can do
  168. text editing things on the Worksheet, and on up to seven other files. You can also issue commands and send information into the Prolog interpreter - see later.
  169.  
  170. The text-editing facilities offered are standard text editor commands and functions.
  171.  
  172. Worth mentioning is 'Auto-indent' which, if enabled, works by copying all the spaces & tabs from the start of the previous line down to the start of this line.
  173. Holding down the Option key when typing Return will do the opposite of whatever is selected for auto-indent.
  174.  
  175. Also worth mentioning is the 'Search All Windows' in the Find and Replace menus:
  176. all windows will be searched, in front-to-back order, until a match is found. The window in which the match is found becomes the front window.
  177. Holding down the Shift key when selecting find or replace will reverse the search direction.
  178.  
  179. An open diamond - ◊ - appears opposite the name of the current front window
  180. in the Window menu. Underlining indicates that the window needs to be
  181. saved (either it's been changed, or it was never saved before).
  182.  
  183. The 'Display Selection' menu will scroll the caret or the selected text into
  184. view.
  185.  
  186. It's possible that Open Prolog won't allow you to open a window because it hasn't
  187. enough memory. To get around this, enter the built-in predicate 'gc'.
  188. This should free up some space for more windows.
  189.  
  190. ° Window Characteristics
  191. When windows are opened, they are opened in the same location (assuming
  192. it's still visible), and with the same size as when they were last closed.
  193.  
  194. Likewise, font, font size and the position of the flashing caret or selection
  195. point are remembered from when the window was last used.
  196.  
  197. A window's maximum size if fixed according to the size of the
  198. printable page in the currently selected printer.
  199.  
  200.  
  201. ° Locked Files
  202. If a file is locked, or its volume is locked or read only, you can use the
  203. window as normal, but you won't be allowed to save changes to that file.
  204. Locked files have a padlock icon in their window's status bar.
  205.  
  206. ◊ The Interpreter part of Open Prolog
  207.  
  208. Most of the transactions that occur between you and the Open Prolog interpreter will be through a window, using the Text Editor.
  209.  
  210. Generally, you issue commands by typing them into a window and then
  211. notifying the interpreter about them using the ENTER key.
  212. Open Prolog writes replies into the same window.
  213.  
  214. You can use any window for sending commands and for getting replies,
  215. but the Worksheet will be chosen by default or if any errors occur
  216. when using another window.
  217.  
  218. The Worksheet can't be closed.
  219.  
  220. ◊ The ENTER Key
  221. While you are editing text, the Prolog interpreter is disconnected from
  222. what you are doing - it won't be 'listening'. To get its attention, you need
  223. to notify it in some way that what you're doing is not just text editing.
  224. That is the function of the ENTER key: all input from the text editor to the
  225. Prolog interpreter is denoted by selecting the text and typing the ENTER key.
  226. (This is similar to the arrangement in Apple's excellent MPW).
  227.  
  228. For example, below is the text of a command to consult the file 'benchmarks'.
  229. To input it to the interpreter,  select it (include the full stop) and
  230. type the ENTER key:
  231.  
  232. [benchmarks].
  233.  
  234. In practice, you don't always have to select the whole thing - if the text
  235. occupies only one line, position the caret anywhere along the line
  236. and press the ENTER key.
  237. The whole line will then be taken as the text. This is called
  238. 'single line selection'.
  239.  
  240. Remember also that you need to use the ENTER key to denote all input to the
  241. interpreter, not just command input. For example, if your program wants to
  242. read a term from the user, you must type or find the text, select it all,
  243. and press the ENTER key to tell the interpreter to take it as input.
  244.  
  245. For example, try evaluating the following query by single-line-selecting it.
  246. You'll need to provide a further input in response; again, you
  247. can use single line selection. Also, remember the full stop after
  248. the term:
  249.  
  250. write('Please enter a Prolog term: '),read(Term),write('It''s: '),write(Term).
  251.  
  252. As is normal on DEC Prolog, where variable bindings are given as part
  253. of the result of a query, the system waits for confirmation - type the
  254. ENTER key - or a request for a retry - type a semicolon and  the ENTER key.
  255.  
  256. ◊ Prompts
  257. The standard ?- prompt generally appears on the  'status bar'
  258. at the top of the front window.
  259. If you wish, you can enter a query preceded by a ?-  - it won't make any
  260. difference. If you precede your query by a :- then it will be performed
  261. without returning the variable bindings.
  262.  
  263. Examples:
  264. :- write(H),nl.
  265. ?- write(G).
  266.  
  267. ◊ Comment on ENTER & Prompts
  268. Using the ENTER key to denote input to the interpreter has many advantages,
  269. although it's probably a bit annoying to get used to.
  270. The principal advantage is that, since RETURN does not signify a command or anything special, you can do standard text editing freely and you can use any part of the Worksheet as a source of input.
  271. In other words, you can re-use text on the Worksheet over and over.
  272. (Some people have complained that there isn't an ENTER key of their
  273. machines. In fact, there is one on every machine. Sometimes it has a symbol
  274. like an arrowhead pointing upwards to meet a horizontal line.
  275. On compact keyboards it is usually the strange key to the right of the
  276. space bar.)
  277.  
  278. ◊ Verbose and Terse Answers
  279. Most Prologs answer a query with a 'yes' (after any variable bindings) or a 'no' depending on whether the query can be proved or not.
  280. Open Prolog defaults to this behaviour also - it gives a 'verbose' answer.
  281. If you wish, you can suppress the output of 'yes' and 'no'
  282. by changing the answering mode from verbose to terse. The built-in predicate
  283. to use is 'system$answer$mode'(CurrentAnswerMode,NewAnswerMode).
  284. Allowed arguments are 'terse' or 'verbose'.
  285. The following example determines the current answering mode without
  286. changing it:
  287.  
  288. 'system$answer$mode'(State,State).
  289.  
  290. ◊ Syntax Errors
  291. When Open Prolog tries to read a term - either as a result of your program,
  292. or of built-in predicates like consult - if it detects any errors, it will try to
  293. notify you in a useful way. An error message is written to the output window.
  294. The part of the error message that begins:
  295. :- 'Show Syntax Error'(… 
  296. has the form of a Prolog command, and can be used to call the
  297. 'Show Syntax Error' built-in predicate,
  298. which will try to open the file and show you where the error was.
  299. You use it by single-line-selecting it.
  300. Try it by consulting the file 'buggy syntax' which has a 
  301. deliberate error:
  302.  
  303. ['buggy syntax'].
  304.  
  305. If the file is too big to open as a window (greater than 32767 bytes), the call will fail.
  306.  
  307. ◊ Activity During Evaluation
  308. During a long evaluation, it's possible to use the
  309. text editor in windows other than the current output window (the current
  310. output window is usually the Worksheet). The system will share
  311. the processor between the interpreter and the text editor.
  312. Generally, you won't notice the sharing being done.
  313. Occasionally, however, the interpreter will keep the processor
  314. for a few seconds to do garbage collection, or I/O.
  315. During that time the text editor will 'freeze' and won't respond to
  316. the keyboard or other user input.
  317. This is normal and is no cause for concern.
  318.  
  319. Please be careful to save your work frequently in this mode,
  320. because if the evaluation causes Open Prolog to crash, 
  321. your work may be lost. 
  322.  
  323. ◊ Stopping an Evaluation
  324. The standard 'Command-.' will halt a Prolog evaluation.
  325.  
  326. ◊ Background Operation
  327. Open Prolog is Multifinder 'friendly' and will run in the Multifinder 
  328. background. This may be useful for long evaluations. Running under System 7,
  329. it can be hidden and still be running.
  330.  
  331.  
  332. ◊ Operation on battery powered Macintoshes.
  333.  
  334. Open Prolog works fine on all battery powered Macintoshes.
  335.  
  336. One complication regarding battery powered Macs is that
  337. during periods of longer than about 15 seconds without any
  338. user interaction or cursor animation, the machine may go into 'rest' mode.
  339. In this mode, battery power is conserved by running about 15 times slower
  340. than normal.
  341.  
  342. Open Prolog spins a cursor during long evaluations to prevent resting.
  343. However, if you are text-editing during an evaluation, the cursor will be
  344. the I-beam, and it won't be animated; if you stop typing or moving the mouse
  345. for more than about 15 seconds, then the machine will rest.
  346.  
  347. ◊ Built-In Predicates
  348. To get a list of all predicates - normal, built-in and external,
  349. there follows a sequence of commands to perform.
  350. Select them all and hit the <ENTER> key:
  351.  
  352. 'system$predicate'(X,Y,Z),functor(Y,X,A),
  353. writeq(X),write('/'),write(A),write(.),write('   % '),write(Z),nl,fail.
  354.  
  355. Note: with a few exceptions, you should stay away from
  356. anything with a $ in it, or anything with the word 'system' in it - you
  357. may end up crashing the program.
  358.  
  359. The file 'Open Prolog Extras' has more information about some of
  360. the non-standard predicates.
  361.  
  362. ◊ Redefining Built-In Predicates
  363. Open Prolog complains if you try to redefine any built-ins or externals.
  364.  
  365. ◊ Arithmetic
  366. Arithmetic is standard 32-bit integer arithmetic. The following
  367. predefined functions are provided:
  368. unary minus: - 
  369. subtraction: - 
  370. addition: +
  371. multiplication: *
  372. integer division: / (also //)
  373. mod (remainder): mod
  374. absolute value: abs
  375. bitwise and: /\
  376. bitwise or: \/
  377. bitwise not: ~ (also \)
  378. bitwise leftshift: <<
  379. bitwise rightshift: >>
  380. maximum integer:  maxint
  381. minimum integer: minint
  382. time:  cputime
  383. The function 'cputime' gives the time in milliseconds since system startup
  384. with a short-term granularity of approximately 16 mS (one system 'tick').
  385. Use the built-in procedure 'system$seconds'(Seconds) for more
  386. accurate timing of long intervals.
  387.  
  388. ◊ Operators
  389. The standard DEC Prolog operator definitions are made at startup.
  390. You can get a list of operator definitions by evaluating the following query.
  391.  
  392. bagof(N,current_op(P,K,N),L),writeq((current_op(P,K,L))),write('.'),nl,fail.
  393.  
  394. ◊ Extended Character Set
  395. The full laser-printer character set (e.g. Times), which has more
  396. characters than the original standard character sets like Chicago,
  397. is assumed here.
  398.  
  399. Accented characters are treated as alphabetic, so atoms containing
  400. accented characters don't need to be put in quotes.
  401.  
  402. Thus the following is legal:
  403.  
  404. Xävier = nóirín+jürgen+École+grève+daõ+çedilla+forêt.
  405.  
  406. ◊ Sorting
  407. Sorting is performed by the Mac's International Utilities, which
  408. should handle accented characters correctly.
  409.  
  410. Names are sorted lexically. Primary ordering of names ignores case and accent
  411. information; case and accent data is used to order names that are
  412. identical under primary ordering.
  413.  
  414. ◊ Files
  415. The file-handling arrangements are essentially unchanged from DEC Prolog,
  416. except where obviously necessary, but please see the Release Notes for 1.0.2 for a discussion of new file-handling predicates.
  417.  
  418. ◊ File Naming
  419. File naming follows standard Macintosh practice. To specify a file in the
  420. home folder, just give its name (as 'benchmarks' above).
  421.  
  422. If it's in another folder, you can give its full pathname. For example, to 
  423. consult a file called 'Utilities' on a disk or volume called 'Open Prolog Disk'
  424. in a folder called 'Samples' you could use:
  425.  
  426. ['Open Prolog Disk:Samples:Utilities'].
  427.  
  428. Alternatively, you can specify a file by its partial pathname (i.e. the
  429. extra information needed to 'get from' the Home Folder to there).
  430. For instance, on this distribution you can use the following to consult
  431. the file 'Tak' in the folder 'Samples' which is in the Home Folder:
  432.  
  433. [':Samples:Tak'].
  434.  
  435. You can also specify a folder or file in a special way. Please refer to the Release Notes for 1.0.2 for information on this.
  436.  
  437. ◊ End of File & End of Line
  438. -    End of line & end of file treatment is the same as in DEC Prolog.
  439. -    When reading from a file, the last term is always 'end_of_file'.
  440. -    When get-ing or get0-ing from a file, the last character is code 26.
  441. .    Carriage Returns (ASCII code 13), generally signifying end-of-line in a file,
  442. are filtered out of the get or get0 stream and replaced by code 31.
  443.  
  444. Input from a window never results in an end of file condition.
  445.  
  446. ◊ nl
  447. -    nl outputs a Carriage Return (ASCII code 13).
  448.  
  449. ◊ get & get0
  450. -    get & get0 always return the next character, irrespective of whether it is
  451. 'printable' or not.
  452.  
  453. ◊ Debugging
  454. The main Program Debugging facility is the trace/1 predicate.
  455. You can trace the execution of a predicate by calling it via trace:
  456.  
  457. %assuming you've already consulted 'tak' above…
  458.  
  459. trace(tak(12,8,4,N)).
  460.  
  461. The commands available are:
  462. <ENTER> - trace
  463. s<ENTER> - step over
  464. a<ENTER> - abort
  465. f<ENTER> - fail
  466. l<ENTER> - leap. Continue tracing silently until a spypoint is encountered.
  467. @<ENTER> - break for one command
  468.  
  469. You can place spypoints (a.k.a. breakpoints) on named predicates. Spypoints are only effective when Open Prolog is in the trace mode.
  470.  
  471. e.g.
  472.  
  473. spy(member).
  474.  
  475. will put a spypoint on all occurences of a member predicate.
  476.  
  477. nospy(append).
  478.  
  479. will remove spypoints from all occurences of append.
  480.  
  481. spying will list all spypoints in place.
  482.  
  483. The unknown/2 predicate specifies what happens when a call is made
  484. to an unknown predicate. (Allowable values are fail or trace.)
  485.  
  486. For example, select:
  487.  
  488. unknown(X,trace).
  489.  
  490. This will set Open Prolog to enter the trace mode when an unknown call is made.
  491.  
  492. Try it now by selecting:
  493.  
  494. huh(What).
  495.  
  496. A debugger giving access to the source code is under development.
  497.  
  498.  
  499.  
  500. ◊ External Predicates
  501. External predicates are extra predicates written separately from Open Prolog, and 
  502. then 'dropped' into Open Prolog using something like ResEdit. At present, an
  503. MPW Pascal interface is defined. It's possible to use SADE to debug external predicates that have been written using MPW.
  504. A THINK C interface is being developed by a number of users - for now, please contact me for details at brady@cs.tcd.ie.
  505.  
  506. To get a list of external predicates available in this version of Open Prolog, execute the following command:
  507.  
  508. 'system$predicate'(X,Y,external),functor(Y,X,A),writeq(X),write('/'),write(A),write(.),nl,fail.
  509.  
  510. More information on building External Predicates, including a few exampes, is available in the folder 'External Predicates…'. 
  511.  
  512.  
  513. ◊ System Error Messages:
  514. There are three kinds of error messages:
  515. A. A simple information box with 'OK' as the only option.
  516. B. A 'Diagnostic' or 'Breakpointer' information box.
  517. This is intended for giving debugging information, and if it turns up
  518. in normal operation it means that a special condition has occured. 
  519. C. Whenever Open Prolog detects a system error, it will warn you about it.
  520. You are generally given some information about the source and kind of the
  521. error. Naturally, it isn't always possible to predict what will happen
  522. if you continue operating the system.
  523.  
  524. Summarising: When you get an error message,
  525. if you are given a choice, it's best (initially) to exit.
  526. You normally get to save your files and windows, although sometimes
  527. the nature of the error causes more errors to be made as the files &
  528. windows are being saved. It that happens, you lose your fi…
  529. Experience will tell what's best to do in a situation.
  530. (I sure hope you don't get a lot of that experience…)
  531.  
  532. I'd appreciate you mailing me with the circumstances and nature of
  533. B & C type messages, and of undesirable effects of A type messages.
  534.  
  535. ◊ Problems with Open Prolog
  536. Here are the known significant difficulties with Open Prolog at the moment.
  537. There are simple workarounds for them all.
  538.  
  539. 1. The absolute maximum size of any file that can be seen in an Open Prolog
  540. window is limited to 32767 characters.
  541. This limit only applies to files that you want to open as windows.
  542. So, for example, if your program produces large output files, that's OK as
  543. long as you don't want to open them as windows from Open Prolog.
  544. Workarounds:
  545.  Break your files into smaller files.
  546.  Trim the Worksheet periodically so that is doesn't get too big.
  547.  To view and process larger text files, you'll need to use a text processor
  548. (MPW highly recommended) or word processor in text mode.
  549. Open Prolog tries to warn you about window contents exceeding 32767
  550. characters. Please don't rely on it too much - when it warns you,
  551. it's often too late to do anything about it.
  552.  
  553. 2. Tab characters are not properly represented or printed - instead a tab
  554. always occupies exactly one space. If you intend using your files with
  555. another text/word processor, then you should put them in…